package com.beep.erp.http;

import com.beep.erp.common.base.BaseBean;
import com.beep.erp.common.bean.BizGoodsListBean;
import com.beep.erp.common.bean.BizStorageLocationsListBean;
import com.beep.erp.common.bean.ClassifyBean;
import com.beep.erp.common.bean.EarlyStageListBean;
import com.beep.erp.common.bean.GoodsDetailBean;
import com.beep.erp.common.bean.LoginBean;
import com.beep.erp.common.bean.OutGoodsBean;
import com.beep.erp.common.bean.OutOrderBean;
import com.beep.erp.common.bean.OutScanBean;
import com.beep.erp.common.bean.PalletGoodsBean;
import com.beep.erp.common.bean.PurchaseListBean;
import com.beep.erp.common.bean.ResultBean;
import com.beep.erp.common.bean.SaveLogBean;
import com.beep.erp.common.bean.StockInDetailBean;
import com.beep.erp.common.bean.StockInListBean;
import com.beep.erp.common.bean.StockListBean;
import com.beep.erp.common.bean.TransferLogBean;
import com.beep.erp.common.bean.UpdateBean;
import com.beep.erp.model.addinstock.SaveStockBody;

import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;

/**
 * FileName: HttpService
 * description:
 * Author: jolly
 * Date: 2018/8/22
 */
public interface HttpService {

    /**
     * 登录
     *
     * @param usrName  用户名
     * @param password 密码
     * @return
     */
    @FormUrlEncoded
    @POST("/a/api/biz/login")
    Observable<ResultBean<LoginBean>> login(@Field("userName") String usrName, @Field("password") String password);

    /**
     * 获取 采购单列表页面
     *
     * @param status   99传获取全部，11部分入库12全部入库
     * @param pageSize 分页  一页显示数量
     * @param pageNo   分页  页码
     * @return
     * @header sign 加密签名参数 添加到header里面
     */
    @GET("/a/api/biz/bizPurchase/list")
    Observable<ResultBean<PurchaseListBean>> getPurchaseData(@Header("sign") String sign,
                                                             @Header("timeStamp") String timeStamp,
                                                             @Query("status") int status,
                                                             @Query("pageSize") int pageSize, @Query("pageNo") int pageNo);

    /**
     * 查询版本更新
     *
     * @return
     */
    @GET("/a/api/biz/bizApk/get")
    Observable<ResultBean<UpdateBean>> updateVision(@Header("sign") String sign, @Header("timeStamp") String timeStamp);

    /**
     * 采购单详情
     *
     * @return
     */
    @GET("/a/api/biz/bizPurchase/get")
    Observable<ResultBean<StockListBean>> getStockDetail(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                         @Query("purchaseId") String purchaseId);

    /**
     * 添加入库单
     *
     * @param sign 签名参数
     * @return
     */

    @POST("/a/api/biz/bizStockIn/save")
    Observable<ResultBean<BaseBean>> saveInstock(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                 @Body SaveStockBody saveStockBody);

    /**
     * 入库单列表
     *
     * @param sign
     * @param pageSize
     * @param pageNo
     * @return
     */
    @GET("/a/api/biz/bizStockIn/list")
    Observable<ResultBean<StockInListBean>> getStockInList(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                           @Query("pageSize") int pageSize, @Query("pageNo") int pageNo);

    /**
     * 入库单详情
     *
     * @param sign
     * @param stockInId-
     * @return
     */
    @GET("/a/api/biz/bizStockIn/get")
    Observable<ResultBean<StockInDetailBean>> getStockInDetail(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                               @Query("stockInId") String stockInId);

    /**
     * 获取商品详情
     *
     * @param sign
     * @param goodsId
     * @return
     */
    @GET("/a/api/biz/bizGoods/get")
    Observable<ResultBean<GoodsDetailBean>> getGoodsDetail(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                           @Query("goodsId") String goodsId);


    /**
     * 获取库位列表
     *
     * @return
     */
    @GET("/a/api/biz/bizStorageLocation/list")
    Observable<ResultBean<BizStorageLocationsListBean>> getBizStorageLocationList(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                                                  @Query("type") String type);


    /**
     * 扫描条形码，根据条码编号查询托盘上的商品信息
     *
     * @param sign      签名参数
     * @param timeStamp 时间戳
     * @param name      条码标号
     * @return
     */
    @GET("/a/api/biz/bizBarcode/get")
    Observable<ResultBean<PalletGoodsBean>> getPalletGoodsDetail(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                                 @Query("name") String name);

    /**
     * 移库
     *
     * @param sign                   签名参数
     * @param timeStamp              时间戳
     * @param userId                 登录人id
     * @param barcodeId              条码id
     * @param goodsId                商品id
     * @param number                 移货数量
     * @param storageLocationIdFront 移货前库位
     * @param storageLocationIdAfter 移货后库位
     * @return
     */
    @FormUrlEncoded
    @POST("/a/api/biz/bizMovePositionLog/save")
    Observable<ResultBean<BaseBean>> movePosition(@Header("sign") String sign, @Header("timeStamp") String timeStamp, @Field("userId") String userId,
                                                  @Field("barcode") String barcodeId, @Field("goodsId") String goodsId, @Field("number") String number,
                                                  @Field("storageLocationIdFront") String storageLocationIdFront, @Field("storageLocationIdAfter") String storageLocationIdAfter);

    /**
     * 获取移库操作日志
     *
     * @param sign
     * @param timeStamp
     * @param pageSize
     * @param pageNo
     * @return
     */
    @GET("/a/api/biz/bizMovePositionLog/list")
    Observable<ResultBean<TransferLogBean>> getTransferLogList(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                               @Query("pageSize") int pageSize, @Query("pageNo") int pageNo);


    /**
     * 期出期入 操作日志列表
     *
     * @param sign
     * @param timeStamp
     * @param pageSize
     * @param pageNo
     * @return
     */
    @GET("/a/api/biz/bizStockLog/list")
    Observable<ResultBean<EarlyStageListBean>> getStockLogList(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                               @Query("pageSize") int pageSize, @Query("pageNo") int pageNo);


    /**
     * 期出期入保存
     *
     * @param sign
     * @param timeStamp
     * @param barcode   条码编号（酱料传）
     * @param goodsCode 商品编号（标配传）
     * @param number    数量
     * @param typeInfo  （1，酱料的期出，2，标配的期出，3，酱料的期入，4，标配的期入）
     * @param userId    操作人id
     * @return
     */
    @FormUrlEncoded
    @POST("/a/api/biz/bizStockLog/save")
    Observable<ResultBean<BaseBean>> saveEarlyStage(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                    @Field("barcode") String barcode, @Field("goodsCode") String goodsCode,
                                                    @Field("number") String number, @Field("typeInfo") String typeInfo,
                                                    @Field("userId") String userId, @Field("manufactureDate") String manufactureDate,
                                                    @Field("storageLocationId") String storageLocationId);

    /**
     * 获取出库单详情
     *
     * @param sign
     * @param timeStamp
     * @param name      出库单条码编号
     * @return
     */
    @GET("/a/api/biz/bizOrder/get")
    Observable<ResultBean<OutOrderBean>> getOutOrder(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                     @Query("name") String name);

    /**
     * 获取出库商品的详细信息
     *
     * @param sign
     * @param timeStamp
     * @param goodsId
     * @return
     */
    @GET("/a/api/biz/bizBarcode/list")
    Observable<ResultBean<OutGoodsBean>> getOutGoods(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                     @Query("goodsId") String goodsId, @Query("orderId") String orderId);

    /**
     * 扫描成功 填写完 出库数量 保存操作
     *
     * @param sign
     * @param timeStamp
     * @param orderId   订单id
     * @param barcodeId 条码id
     * @param number    出库数量
     * @param userId    操作人id
     * @return
     */
    @FormUrlEncoded
    @POST("/a/api/biz/bizBarcodeLog/save")
    Observable<ResultBean<SaveLogBean>> saveLog(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                @Field("orderId") String orderId, @Field("barcodeId") String barcodeId,
                                                @Field("number") String number, @Field("userId") String userId, @Field("goodsId") String goodsId);

    /**
     * 出库单扫描
     *
     * @param sign
     * @param timeStamp
     * @param name
     * @param goodsId
     * @return
     */
    @GET("/a/api/biz/bizBarcode/getByOrder")
    Observable<ResultBean<OutScanBean>> getByOrder(@Header("sign") String sign, @Header("timeStamp") String timeStamp,
                                                   @Query("name") String name, @Query("goodsId") String goodsId);

    /**
     * 出库接口
     *
     * @param sign
     * @param timeStamp
     * @param orderId   订单id
     * @return
     */
    @FormUrlEncoded
    @POST("/a/api/biz/bizOrder/out")
    Observable<ResultBean<BaseBean>> outGoods(@Header("sign") String sign, @Header("timeStamp") String timeStamp, @Field("orderId") String orderId);


    /**
     * 获取首页库存商品
     *
     * @param sign
     * @param timeStamp
     * @param pageSize
     * @param pageNo
     * @return
     */
    @GET("a/api/biz/bizGoods/allList")
    Observable<ResultBean<BizGoodsListBean>> getBizGoods(@Header("sign") String sign, @Header("timeStamp") String timeStamp, @Query("pageSize") int pageSize, @Query("pageNo") int pageNo,
                                                         @Query("classifyId") String classify,
                                                         @Query("searchKey") String searchKey);

    /**
     * 获取库存分类
     *
     * @param sign
     * @param timeStamp
     * @return
     */
    @GET("/a/api/biz/bizGoods/goodsClassify")
    Observable<ResultBean<ClassifyBean>> getGoodsClassify(@Header("sign") String sign, @Header("timeStamp") String timeStamp, @Query("type") String type);
}
